<?php
/**
 * 数据库类 ( 单例模式 )
 *
 * @author 雅典娜之子
 * @version mysql.class.php 2009-02-12
 */
!defined('ACCESSING') && exit('Forbidden');

class Mysql
{
	private $conn;
	private static $instance;

	function __construct($host, $user, $password, $database){
		$this->conn = @mysql_connect($host, $user, $password);
		if(!$this->conn){
			exit('Can not connect to MySQL server');
		}
		if($database){
			$this->select_db($database);
		}
		@mysql_query('set names utf8');
	}

	/**
	 * 获得数据库对象
	 *
	 * @param string $host
	 * @param string $user
	 * @param string $password
	 * @param string $database
	 *
	 * @return Mysql
	 */
	static function getInstance($host, $user, $password, $database){
		if(!self::$instance){
			self::$instance = new Mysql($host, $user, $password, $database);
		}
		return self::$instance;
	}

	/**
	 * 选择数据库
	 *
	 * @param string $database
	 */
	function select_db($database){
		if(!@mysql_select_db($database, $this->conn)){
			exit('Can not use database');
		}
	}

	/**
	 * 关闭连接
	 *
	 * @return boolean
	 */
	function close(){
		return mysql_close($this->conn);
	}

	/**
	 * 执行sql语句
	 *
	 * @param string $sql
	 * @return resource $query
	 */
	function query($sql){
		$query = mysql_query($sql, $this->conn);
		if(!$query){
			exit('MySQL Query Error!SQL:'.$sql);
		}
		return $query;
	}

	/**
	 * 从数据库获取一条记录
	 *
	 * @param string $sql
	 * @return array
	 */
	function getone($sql){
		$query = $this->query($sql);
		return $this->fetch_array($query);
	}

	/**
	 * 从结果集获取一行数据
	 *
	 * @param resource $query
	 * @param int $result_type ( MYSQL_BOTH, MYSQL_ASSOC, MYSQL_NUM )
	 * @return array
	 */
	function fetch_array($query, $result_type = MYSQL_ASSOC){
		return mysql_fetch_array($query, $result_type);
	}

	/**
	 * 返回上次操作受影响的行数
	 *
	 * @return int
	 */
	function affected_rows() {
		return mysql_affected_rows($this->conn);
	}

	/**
	 * 获取结果集的记录数
	 *
	 * @param resource $query
	 * @return int
	 */
	function num_rows($query) {
		return mysql_num_rows($query);
	}

	/**
	 * 释放结果集
	 *
	 * @param resource $query
	 * @return boolean
	 */
	function free_result($query) {
		return mysql_free_result($query);
	}

	/**
	 * 获取上次insert时产生的ID
	 *
	 * @return int
	 */
	function insert_id() {
		return mysql_insert_id($this->conn);
	}

	/**
	 * 字符串转义
	 *
	 * @param string $value
	 */
	function add_slashes($value){

		if(is_int($value)){ return $value; }
		if(is_bool($value)){ return $value ? 1 : 0; }
		if(is_null($value)){ return 'NULL'; }
		return mysql_real_escape_string($value, $this->conn);
	}

}